package zzs.generalframework.console.core.user.usersalary.service.impl;

import java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import zzs.generalframework.common.core.user.usersalary.UserSalaryBO;
import zzs.generalframework.common.core.user.usersalary.UserSalaryInfo;
import zzs.generalframework.common.core.user.usersalary.UserSalaryPO;
import zzs.generalframework.console.common.exception.ConsoleException;
import zzs.generalframework.console.common.exception.ConsoleRollbackException;
import zzs.generalframework.console.common.model.ConsoleReturnBO;
import zzs.generalframework.console.common.model.ConsoleReturnBO.ConsoleResult;
import zzs.generalframework.console.core.user.usersalary.dao.IUserSalaryDao;
import zzs.generalframework.console.core.user.usersalary.service.IUserSalaryService;
import zzs.generalframework.util.core.reflect.BeanUtils;

/**
 * @title
 * @description
 * @project zzs-console
 * @package zzs.generalframework.console.core.user.usersalary.service.impl
 * @author zzs
 * @date 2018年2月5日
 * @version 1.0
 */
@Service("zzs.generalframework.console.core.user.usersalary.service.impl.userSalaryServiceImpl")
public class UserSalaryServiceImpl implements IUserSalaryService
{

	private Logger logger = LoggerFactory.getLogger(UserSalaryServiceImpl.class);
	@Autowired
	BeanUtils beanUtils;
	@Autowired
	IUserSalaryDao userSalaryDao;

	@Override
	public ConsoleReturnBO saveUserSalary(UserSalaryBO userSalaryBO)
	{
		logger.debug("====保存用户工资信息开始====");
		logger.debug("====保存用户工资信息.入参:UserSalaryBO=[{}]====", userSalaryBO);
		ConsoleReturnBO returnConsoleReturnBO = new ConsoleReturnBO();
		UserSalaryPO userSalaryPO = new UserSalaryPO();
		copyUserSalaryBO2UserSalaryPO(userSalaryBO, userSalaryPO);
		Boolean insertResult = userSalaryDao.insert(userSalaryPO);
		if (insertResult)
		{
			returnConsoleReturnBO.setResult(ConsoleResult.SUCCESS);
		}
		logger.debug("====保存用户工资信息.出参:ConsoleReturnBO=[{}]====", returnConsoleReturnBO);
		logger.info("====保存用户工资信息结束====");
		return returnConsoleReturnBO;
	}

	@Override
	public ConsoleReturnBO saveUserSalary(List<UserSalaryBO> userSalaryBOList) throws ConsoleException
	{
		logger.info("====保存用户工资信息列表开始====");
		logger.debug("====保存用户工资信息列表.入参:UserSalaryBOList=[{}]====", userSalaryBOList);
		ConsoleReturnBO returnConsoleReturnBO = new ConsoleReturnBO();
		returnConsoleReturnBO.setResult(ConsoleResult.SUCCESS);
		for (UserSalaryBO itemBO : userSalaryBOList)
		{
			ConsoleReturnBO itemResult = saveUserSalary(itemBO);
			if (ConsoleResult.FAILD.equals(itemResult.getResult()))
			{
				returnConsoleReturnBO.setResult(ConsoleResult.FAILD);
				returnConsoleReturnBO.setMessage(itemResult.getMessage());
				throw new ConsoleRollbackException(itemResult.getMessage());
			}
		}
		logger.debug("====保存用户工资信息列表.出参:ConsoleReturnBO=[{}]====", returnConsoleReturnBO);
		logger.info("====保存用户工资信息列表结束====");
		return returnConsoleReturnBO;
	}

	@Override
	public ConsoleReturnBO getUserSalary(UserSalaryInfo userSalaryInfo)
	{
		logger.info("====获取用户工资信息开始====");
		logger.debug("====获取用户工资信息.入参:UserSalaryInfo=[{}]====", userSalaryInfo);
		ConsoleReturnBO returnConsoleReturnBO = new ConsoleReturnBO();
		List<UserSalaryPO> userSalaryPOList = userSalaryDao.select(userSalaryInfo);
		if (userSalaryPOList == null || userSalaryPOList.size() == 0)
		{
			returnConsoleReturnBO.setMessage("未获取到记录");
		}
		else if (userSalaryPOList.size() == 1)
		{
			returnConsoleReturnBO.setResult(ConsoleResult.SUCCESS);
			UserSalaryBO userSalaryBO = new UserSalaryBO();
			copyUserSalaryPO2UserSalaryBO(userSalaryPOList.get(0), userSalaryBO);
			returnConsoleReturnBO.setReturnObj(userSalaryBO);
		}
		else
		{
			returnConsoleReturnBO.setMessage("记录不唯一");
			UserSalaryBO userSalaryBO = new UserSalaryBO();
			copyUserSalaryPO2UserSalaryBO(userSalaryPOList.get(0), userSalaryBO);
			returnConsoleReturnBO.setReturnObj(userSalaryBO);
		}
		logger.debug("====获取用户工资信息.出参:ConsoleReturnBO=[{}]====", returnConsoleReturnBO);
		logger.info("====获取用户工资信息结束====");
		return returnConsoleReturnBO;
	}

	@Override
	public ConsoleReturnBO listUserSalary(UserSalaryInfo userSalaryInfo)
	{
		logger.info("====获取用户工资信息列表开始====");
		logger.debug("====获取用户工资信息列表.入参:UserSalaryInfo=[{}]====", userSalaryInfo);
		ConsoleReturnBO returnConsoleReturnBO = new ConsoleReturnBO();
		List<UserSalaryPO> userSalaryPOList = userSalaryDao.select(userSalaryInfo);
		if (userSalaryPOList == null || userSalaryPOList.size() == 0)
		{
			returnConsoleReturnBO.setMessage("未获取到记录");
		}
		else
		{
			returnConsoleReturnBO.setResult(ConsoleResult.SUCCESS);
			List<UserSalaryBO> resultList = new ArrayList<UserSalaryBO>();
			for (UserSalaryPO itemPO : userSalaryPOList)
			{
				UserSalaryBO itemBO = new UserSalaryBO();
				copyUserSalaryPO2UserSalaryBO(itemPO, itemBO);
				resultList.add(itemBO);
			}
			returnConsoleReturnBO.setReturnObj(resultList);
		}
		logger.debug("====获取用户工资信息列表.出参:ConsoleReturnBO＝[{}]====", returnConsoleReturnBO);
		logger.info("====获取用户工资信息列表结束====");
		return returnConsoleReturnBO;
	}

	@Override
	public ConsoleReturnBO updateUserSalary(UserSalaryBO userSalaryBO)
	{
		logger.info("====更新用户工资信息开始====");
		logger.debug("====更新用户工资信息.入参:UserSalaryBO=[{}]====", userSalaryBO);
		ConsoleReturnBO returnConsoleReturnBO = new ConsoleReturnBO();
		UserSalaryPO userSalaryPO = new UserSalaryPO();
		copyUserSalaryBO2UserSalaryPO(userSalaryBO, userSalaryPO);
		Boolean updateResult = userSalaryDao.update(userSalaryPO);
		if (updateResult)
		{
			returnConsoleReturnBO.setResult(ConsoleResult.SUCCESS);
		}
		logger.debug("====更新用户工资信息.出参:ConsoleReturnBO=[{}]====", returnConsoleReturnBO);
		logger.info("====更新用户工资信息结束====");
		return returnConsoleReturnBO;
	}

	@Override
	public ConsoleReturnBO updateUserSalary(List<UserSalaryBO> userSalaryBOList) throws ConsoleException
	{
		logger.info("====更新用户工资信息列表开始====");
		logger.debug("====更新用户工资信息列表.入参:List<UserSalaryBO>=[{}]====", userSalaryBOList);
		ConsoleReturnBO returnConsoleReturnBO = new ConsoleReturnBO();
		returnConsoleReturnBO.setResult(ConsoleResult.SUCCESS);
		for (UserSalaryBO itemBO : userSalaryBOList)
		{
			ConsoleReturnBO itemResult = updateUserSalary(itemBO);
			if (ConsoleResult.FAILD.equals(itemResult.getResult()))
			{
				returnConsoleReturnBO.setResult(ConsoleResult.FAILD);
				returnConsoleReturnBO.setMessage(itemResult.getMessage());
				throw new ConsoleRollbackException(itemResult.getMessage());
			}
		}
		logger.debug("====更新用户工资信息列表.出参:ConsoleReturnBO=[{}]====", returnConsoleReturnBO);
		logger.info("====更新用户工资信息列表结束====");
		return returnConsoleReturnBO;
	}

	@Override
	public ConsoleReturnBO removeUserSalary(UserSalaryBO userSalaryBO)
	{
		logger.info("====删除用户工资信息开始====");
		logger.debug("====删除用户工资信息.入参:UserSalaryBO＝[{}]======", userSalaryBO);
		ConsoleReturnBO returnConsoleReturnBO = new ConsoleReturnBO();
		UserSalaryPO userSalaryPO = new UserSalaryPO();
		copyUserSalaryBO2UserSalaryPO(userSalaryBO, userSalaryPO);
		Boolean deleteResult = userSalaryDao.delete(userSalaryPO);
		if (deleteResult)
		{
			returnConsoleReturnBO.setResult(ConsoleResult.SUCCESS);
		}
		logger.debug("====删除用户工资信息.出参:ConsoleReturnBO=[{}]====", returnConsoleReturnBO);
		logger.info("====删除用户工资信息结束====");
		return returnConsoleReturnBO;
	}

	@Override
	public ConsoleReturnBO removeUserSalary(List<UserSalaryBO> userSalaryBOList) throws ConsoleException
	{
		logger.info("====删除用户工资信息列表开始====");
		logger.debug("====删除用户工资信息列表.入参:List<UserSalaryBO>＝[{}]======", userSalaryBOList);
		ConsoleReturnBO returnConsoleReturnBO = new ConsoleReturnBO();
		returnConsoleReturnBO.setResult(ConsoleResult.SUCCESS);
		for (UserSalaryBO itemBO : userSalaryBOList)
		{
			ConsoleReturnBO itemResult = removeUserSalary(itemBO);
			if (ConsoleResult.FAILD.equals(itemResult.getResult()))
			{
				returnConsoleReturnBO.setResult(ConsoleResult.FAILD);
				returnConsoleReturnBO.setMessage(itemResult.getMessage());
				throw new ConsoleRollbackException(itemResult.getMessage());
			}
		}
		logger.debug("====删除用户工资信息列表.出参:ConsoleReturnBO＝[{}]====", returnConsoleReturnBO);
		logger.info("====删除用户工资信息列表结束====");
		return returnConsoleReturnBO;
	}

	@Override
	public Long countUserSalary(UserSalaryBO userSalaryBO)
	{
		logger.info("====统计用户工资信息开始====");
		logger.debug("====统计用户工资信息。入参：UserSalaryBO＝[{}]======", userSalaryBO);
		Long returnLong = new Long(0);
		UserSalaryPO userSalaryPO = new UserSalaryPO();
		copyUserSalaryBO2UserSalaryPO(userSalaryBO, userSalaryPO);
		returnLong = userSalaryDao.count(userSalaryPO);
		logger.debug("====统计用户工资信息.出参:Long＝[{}]======", returnLong);
		logger.info("====统计用户工资信息结束====");
		return returnLong;
	}

	private void copyUserSalaryBO2UserSalaryPO(UserSalaryBO userSalaryBO, UserSalaryPO userSalaryPO)
	{
		beanUtils.copyBeanNotNull(userSalaryBO, userSalaryPO);
		if (userSalaryBO.getSysID() != null)
		{
			userSalaryPO.setSeqID(userSalaryBO.getSysID());
		}
	}

	private void copyUserSalaryPO2UserSalaryBO(UserSalaryPO userSalaryPO, UserSalaryBO userSalaryBO)
	{
		beanUtils.copyBeanNotNull(userSalaryPO, userSalaryBO);
		if (userSalaryPO.getSeqID() != null)
		{
			userSalaryBO.setSysID(userSalaryPO.getSeqID());
		}
	}

}
